import java.util.Random;


public class GeneradorSQL {

	String[] listaOperaciones = {"SELECT", "INSERT", "UPDATE"};
	String[] listaTablas = {"ALUMNOS", "ANIOACADEMICO", "CURSOS", "CURSOSALUMNOS", "CURSOSFACULTADES", "EXAMENES", "EXAMENESALUMNOS", "FACULTADES", "SEMESTRES"}; 
	String[] nombres = {"JOSE", "LUIS", "PEDRO", "IGNACIO", "CESAR", "GONZALO", "MARIANO", "PABLO"};
	
	/**
	 * Genera una consulta en SQL (INSERT, SELECT, UPDATE)
	 * @return consulta en SQL
	 */
	
	public String generar(){
		
		int indice = this.randomNumber(0, listaOperaciones.length);
		String operacion = listaOperaciones[indice];
		
		int indiceTabla = this.randomNumber(0, listaTablas.length);
		String tabla = listaTablas[indiceTabla];
		
		if(operacion.equals("SELECT")){
			return "SELECT * FROM "+ tabla+ "FOR UPDATE";
		}
		else 
			if(operacion.equals("INSERT"))
			{
				return generarInsert();
			}
			else
			{
				return "UPDATE";
			}
	}
	
	/**
	 * Devuelve un numero entero comprendido en el rango [min,max]
	 * @param min
	 * @param max
	 * @return
	 */
	public int randomNumber(int min, int max) {
		return min + (new Random()).nextInt(max-min);
	}
	
	/**
	 * Genera una consulta en SQL en la cual inserta un alumno en la tabla ALUMNOS
	 * @return sentencia SQL INSERT 
	 */
	private String generarInsert(){
		
		int indiceNombre = this.randomNumber(0, nombres.length -1);
		String nombre = nombres[indiceNombre];
		
		String cedula = Integer.toString(this.randomNumber(900000, 6000001));
		
		String salida = "INSERT INTO ALUMNOS(DOC_ID, CHECK_DIGIT, APEALU, NOMALU, SEXO, FECNAC, CALLE, NUMERO, LOCALIDAD) VALUES("+cedula+ ", 0, 'LOPEZ','"+nombre+"','M','1/1/1990','Brito del Pino', '1316', 'MONTEVIDEO')";
		
		return salida;
	}
	
	/**
	 * Dada una consulta devuelve el tipo de consulta que es
	 * @param consulta
	 * @return tipoConsulta
	 */
	public String TipoConsulta(String consulta){
		String[] array = consulta.split(" ");
		if(array[0].equals("SELECT")){
			return "SELECT";
		}
		else
			if(array[0].equals("INSERT")){
				return "INSERT";
			}
			else
			{
				return "UPDATE";
			}
	}
}
